package com.fingerth.crawler.room


import com.fingerth.crawler.App
import com.fingerth.crawler.bean.NovelChapterListBean
import com.fingerth.crawler.bean.NovelContentBean

class NovelChapterDaoUtils {

    private val dao: NovelChapterDao? by lazy { App.app.roomNovel?.novelChapterDao() }

    fun insert(nBean: NovelChapterListBean?) {
        nBean?.data?.data?.let { d ->
            d.forEach {
                val h = queryById(it.chapterId)
                if (h == null) dao?.insert(NovelChapter(it)) else {
                    val isChange = h.change(it)
                    if (isChange) dao?.update(h)
                }
            }
        }
    }

    fun insertContent(old: NovelChapter?, nBean: NovelContentBean?) {
        nBean?.data?.data?.content?.let {
            old?.let { o ->
                val isChange = o.change(it)
                if (isChange) dao?.update(o)
            }
        }

    }
//    fun insertWithNoCheck(vararg chapter: NovelChapter) {
//
//    }
//    fun insert(vararg chapter: NovelChapter) {
//        chapter.forEach {
//            val c = queryById(it.chapterId)
//            if (c == null) dao?.insert(it) else {
//                c.update(it)
//                novelChapterDao?.update(c)
//            }
//        }
//    }

//    fun update(chapter: NovelChapter) {
//        dao?.update(chapter)
//    }

    fun count(): Int {
        return dao?.count() ?: 0
    }

    //    fun countByFictionId(fid: String): Int {
//        return dao?.countByFictionId(fid) ?: 0
//    }
//
//    fun deleteAll() {
//        dao?.deleteAll()
//    }
//
//    fun deleteByFictionId(fid: String) {
//        dao?.deleteByFictionId(fid)
//    }
//
//    fun queryByFictionId(fictionId: String): Array<NovelChapter> {
//        return dao?.queryByFictionId(fictionId) ?: arrayOf()
//    }
//
//    fun queryByFictionId(fictionId: String, offset: Int, pageSize: Int): Array<NovelChapter> {
//        return dao?.queryByFictionId(fictionId, offset, pageSize) ?: arrayOf()
//    }
    fun queryByIndex(index: Int): NovelChapter? = dao?.queryByIndex(index)

    fun queryById(id: String): NovelChapter? {
        return dao?.queryById(id)
    }


}